參考文章:這篇
I/O
行尾空白
for(int i=0;i<n;i++) cout << v[i] << " \n"[i==n-1];
C++ 陣列語法 a[b]
等價於 *(a+b)
也就是 " \n"[i==n-1]
可以看成是 str=" \n"
*(str+(i==n-1))
。
C++ 整行讀取
- cin.getline(name, length, ending character)
cin.getline(str, 100, '\n')
- getline(istream, string)
getline(cin,str)
stringstream
工能
- 時常用來做字串分割 ( 空白分割 )
stringstream ss; string s1, s2; getline(cin, s1); ss << s1; while(ss >> s2) cout << s2 << "\n";
- int string 之間的轉換
清空
stringstream ss1;
...
// 缺一不可
ss1.str("");
ss1.clear();
string STL
反轉
reverse(s1.begin(),s1.end());
反轉並賦值
s2.assign(s1.rbegin(), s1.rend());
大小寫轉換
tranform(,,, :: toupper)
/tranform(,,, :: tolower)
#define ALL(X) (X).begin(), (X).end() transform(ALL(s1), s1.begin(), :: toupper); // 全部轉大寫 transform(ALL(s1), s1.begin(), :: tolower); // 全部轉小寫
toupper
/tolower
for(int i=0;i<s1.size();i++) s1[i]=toupper(s1[i]) //逐一轉大寫 for(int i=0;i<s1.size();i++) s1[i]=tolower(s1[i]) //逐一轉小寫
back_insert
back_inserter()
- 好處:不需先知道容器的大小
搭配 transform()
的用法
#define ALL(X) (X).begin(), (X).end()
s1="abcdefghijklmn";
s2="123456789";
transform(ALL(s1), back_inserter(s2), :: toupper);
// s2="123456789ABCDEFGHIJKLMN"
搭配 copy()
的用法
#define ALL(X) (X).begin(), (X).end()
s1="abcdefghijklmn";
s2="123456789";
copy(ALL(s1),back_inserter(s2));
// s2="123456789abcdefghijklmn";
string to int
atoi()
使用 c_str
的原因:參考文章
s1="123456789";
int a=atoi(s1.c_str());
// a=123456790;
int to string
to_string()
int a=123456789; string s1; s1=to_string(a+1); // s1="123456790"
assign
.assign()
string::npos
的定義為static const size_t npos = -1;
string s,str; str="SubaRya"; s.assign(str); // s="SubaRya" s.assign(str,1,3);// s="uba" s.assign(str,4,string::npos);// s="Rya" s.assign("hello"); // s="hello" s.assign("SubaRya",8);// 'S','u','b','a','R','y','a','\0' 給 s s.assign(5,'a');// s="aaaaa"
刪除連續重複字元
sort(ALL(s2));
s1=s2="aaabbbbnnnaaaafff";
s1.erase(unique(ALL(s1)),s1.end());
s2.erase(unique(ALL(s2)),s2.end());
// s1="abnaf", s2="abfn"
刪除特定字元
erase()
、remove()
s1.erase(std::remove(s1.begin(), s1.end(), 'a'/*欲刪除的字元*/), s1.end());
字串中尋找
.find()
- 如果下述
s2
改成 單一字元也可以int p=s1.find(s2, pos=0) ;// 從 pos 開始查找 s2 在 s1 中出現的位置回傳給 p if(p==string::npos) cout << "Not found.\n"; else cout << p << "\n";
- 本文連結:https://blog.subarya.me/2021/08/17/[LifeCP_%E7%94%9F%E6%B4%BB%E7%AB%B6%E7%A8%8B]%20%E3%80%91String%20STL%20%E7%AF%87/
- 版權聲明:本Blog所有文章除了特別聲明外,均默認採用 許可之協議。